﻿/*   
    Copyright (C) 2009 Galaktika Corporation ZAO

    This file is a part of Galaktika.BusinessMonitor
 
    Galaktika.BusinessMonitor is a free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
      
    You should have received a copy of the GNU General Public License
    along with Galaktika.BusinessMonitor.  If not, see <http://www.gnu.org/licenses/>.
  
    If GPL v.3 is not suitable for your products or company,
    Galaktika Corp provides Galaktika.BusinessMonitor under a flexible commercial license
    designed to meet your specific usage and distribution requirements.
    If you have already obtained a commercial license from Galaktika Corp,
    you can use this file under those license terms.
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Galaktika.BI.Silverlight.Services;
using Galaktika.BI.Silverlight.ClientApp.Web.Runtime;
using Galaktika.BI.Silverlight.ClientApp.Web.Runtime.DataAccess;
using Galaktika.BI.Silverlight.ClientApp.Web.Commands;

namespace Galaktika.BI.Silverlight.ClientApp.Web
{
    /// <summary>
    /// Summary description for DataService
    /// </summary>
    [WebService(Namespace = Common.Namespace)]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    //[System.ServiceModel.ServiceBehavior(ConfigurationName = "DataServiceBehavior")]
    //[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class DataService : System.Web.Services.WebService
    {
        [WebMethod(EnableSession = true)]
        //[System.ServiceModel.FaultContract(typeof(ApplicationException))]
        public InvokeResultSchema InvokeCommand(InvokeSchema invoker)
        {
            InvokeResultSchema res = null;
            try
            {
                res = CommandDispatcher.Dispatch(invoker).Invoke();
            }
            catch (Exception exc)
            {
                res = new InvokeResultSchema(invoker.CommandId, exc.ToString(), KnownContentTypes.Error);
            }
            finally
            {
                res.Queries.AddRange(QueryManager.Current.ExtractQueryDescriptors());
            }

            return res;
        }

        //[WebMethod(EnableSession=true)]
        //public string GetDataBinderHashableValue()
        //{
        //    return DataBinder.Current.GetHashableValue();
        //}

        //[WebMethod(EnableSession = true)]
        //public string GetDataBinderStatusHash(string contextId)
        //{
        //    return DataBinder.Current.GetStatusHash(contextId);
        //}
    }
}
